from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
import os
import requests
import json

# 从环境变量获取通义千问API密钥
dashscope_api_key = os.getenv("DASHSCOPE_API_KEY", "sk-2c036d80d14a443f8769e072bb09a2e1")

# 初始化聊天模型，使用通义千问qwen-plus模型
llm = ChatOpenAI(
    api_key=dashscope_api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    model="qwen-plus",
    temperature=0.1
)

# 定义天气查询工具
def get_weather(city: str) -> str:
    """获取指定城市的天气信息"""
    # 这里使用模拟数据，实际应用中应该调用真实的天气API
    weather_data = {
        "北京": "今天北京天气晴朗，气温25°C，微风",
        "上海": "今天上海多云，气温28°C，东南风3级",
        "广州": "今天广州雷阵雨，气温32°C，南风2级"
    }
    return weather_data.get(city, f"抱歉，暂时无法获取{city}的天气信息")

# 创建工具列表
tools = [
    Tool(
        name="weather_tool",
        description="获取指定城市的天气信息，输入参数是城市名称",
        func=get_weather
    )
]

# 创建提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有用的助手，可以使用工具来回答用户的问题。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

# 创建agent
agent = create_openai_tools_agent(llm, tools, prompt)

# 创建记忆
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# 创建agent执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    memory=memory,
    verbose=True
)

# 执行对话
print("=== 第一次对话 ===")
result1 = agent_executor.invoke({"input": "北京今天天气怎么样？"})
print(f"回答: {result1['output']}")

print("\n=== 第二次对话 ===")
result2 = agent_executor.invoke({"input": "明天比今天高3度，明天气温是多少"})
print(f"回答: {result2['output']}")



